|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(*~\Глагол\Отделы\Поле~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) (**) ОТДЕЛ ПолеВвода; (*============================================================================* * НАЗНАЧЕНИЕ: ввод строки текста *============================================================================*) ИСПОЛЬЗУЕТ Надел, Поле, Подложка, Холст, Черта, Кнопка, Записка, Памятка, Вывод ИЗ "..\Обмен\", Ввод ИЗ "..\Обмен\"; (******************************************************************************) ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка); (* получить и обработать управляющие послания *) ПЕР код:ЦЕЛ; УКАЗ ДЛЯ посылка ВИДА | Ввод.ОтКлавиш: код:=посылка.код; посылка.код:=0; (* скорее всего отработаем посылку *) ВЫБРАТЬ код ИЗ | 1BH: поле.состояние:=Поле.сОтмена (* Esc *) | 79H: поле.состояние:=Поле.сДалее (* F10 *) | 0DH: поле.состояние:=Поле.сДалее (* Ent *) ИНАЧЕ посылка.код:=код КОН | Кнопка.Посылка: поле.состояние:=посылка.кнопка.действие ИНАЧЕ КОН КОН Приём; (******************************************************************************) ЗАДАЧА Выполнить-( (* Цель: осуществить ввод строки текста *) (******************************************************************************) (* До: *) заголовок-:ЦЕПЬ; (* заголовок подложки *) колонок:ЦЕЛ; (* желаемая ширина строки ввода *) окружение:Поле.Доступ;(* окружающее поле *) номерСправки:ЦЕЛ; (* номер справки или 0 *) примечание-:ЦЕПЬ; (* дополнительное примечание *) (* Примечение: если <цепь> = "", то начальное значение берётся из памятки *) (* После: *) цепь+:ЦЕПЬ (* полученный текст *) (* Ответ: *) ):ЦЕЛ; (* состояние поля после отработки *) (******************************************************************************) ПОСТ (* цепочки для кнопок *) цДалее ="[ Далее ]"; цОтмена="[ Отмена ]"; длДалее =ДЛИНА(цДалее); длОтмена=ДЛИНА(цОтмена); промежуток=2; (* промежуток между кнопками *) занято=длДалее+промежуток+длОтмена; ПЕР поле:Поле.Доступ; подложка:Подложка.Доступ; черта:Черта.Доступ; холст:Холст.Доступ; записка:Записка.Доступ; кнДалее,кнОтмена:Кнопка.Доступ; позДалее,позОтмена:ЦЕЛ; УКАЗ (* вычисление местоположения кнопок *) ЕСЛИ занято > колонок ТО колонок:=занято КОН; позДалее:=2 + (колонок-занято+1) ДЕЛИТЬ 2; позОтмена:=позДалее + длДалее + промежуток; (* создаём поле *) поле:=Поле.Создать(0,0,8,колонок+4,окружение,ВКЛ,Приём); (* создаём наделы *) подложка:=Подложка.Создать(0,0,0,0,заголовок); ЕСЛИ цепь # "" ТО холст:=Холст.СоздатьСтроку(2,2,-2,ПУСТО); Холст.СтрокуИзЦепи(холст,цепь) ИНАЧЕ холст:=Холст.СоздатьСтроку(2,2,-2,Памятка.Найти(заголовок)) КОН; записка:=Записка.Создать (3,2,2,-2,примечание); черта:=Черта.Создать (-3,0,1,0); кнДалее:=Кнопка.Создать (-2,позДалее,цДалее,Поле.сДалее,ВКЛ); кнОтмена:=Кнопка.Создать (-2,позОтмена,цОтмена,Поле.сОтмена,ВКЛ); (* добавляем наделы вс порядке отрисовки и получения ввода *) Поле.ДобавитьНадел(поле,подложка); Поле.ДобавитьНадел(поле,холст); Поле.ДобавитьНадел(поле,записка); Поле.ДобавитьНадел(поле,черта); Поле.ДобавитьНадел(поле,кнДалее); Поле.ДобавитьНадел(поле,кнОтмена); (* основная работа *) Поле.Рисовать(поле); ПОВТОРЯТЬ Поле.Проверить(поле) ДО поле.состояние # Поле.сРабота; (* восстанавливаем окружение *) Поле.Рисовать(окружение); (* перебрасываем данные *) ЕСЛИ поле.состояние = Поле.сДалее ТО Холст.СтрокуВПамятку(холст); Холст.СтрокуВЦепь(холст,цепь) КОН; ВОЗВРАТ поле.состояние КОН Выполнить; КОН ПолеВвода. |
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com
|
|